Navigational Properties এবং Lazy Loading

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework) Entity Relationships এবং Navigational Properties |
254
254

Entity Framework (EF) এ Navigational Properties এবং Lazy Loading দুটি অত্যন্ত গুরুত্বপূর্ণ বিষয়। এই দুটি ফিচার ডেটাবেস সম্পর্ক (relationships) পরিচালনায় সাহায্য করে এবং ডেটাবেসের সাথে সম্পর্কিত ডেটা রিট্রাইভ করতে একাধিক উপায় প্রদান করে।


Navigational Properties

Navigational Properties এমন প্রপার্টি, যা এক Entity থেকে অন্য Entity এর সাথে সম্পর্ক তৈরি করে। EF তে, Navigational Properties এর মাধ্যমে আপনি One-to-One, One-to-Many, এবং Many-to-Many সম্পর্ক তৈরি করতে পারেন। এই প্রপার্টিগুলি সাধারণত Entity ক্লাসের মধ্যে একটি রেফারেন্স হিসেবে থাকে এবং ডেটাবেসের টেবিলগুলোর মধ্যে সম্পর্ক স্থাপন করে।

Navigational Properties উদাহরণ

ধরা যাক, আমাদের একটি Student এবং Course টেবিল আছে, যেখানে একজন ছাত্র একাধিক কোর্সে রেজিস্টার করতে পারে। এই সম্পর্ক One-to-Many

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    
    // Navigational Property for the related Courses
    public ICollection<Course> Courses { get; set; }
}

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    
    // Foreign Key for the related Student
    public int StudentId { get; set; }
    public Student Student { get; set; }  // Navigational Property
}

এখানে:

  • Student ক্লাসে Courses একটি Navigational Property হিসেবে সংজ্ঞায়িত করা হয়েছে, যা ICollection টাইপের, অর্থাৎ একজন ছাত্রের একাধিক কোর্স থাকতে পারে।
  • Course ক্লাসে Student এবং StudentId প্রপার্টি রয়েছে, যা Foreign Key হিসেবে কাজ করে এবং Student Entity এর সাথে সম্পর্ক স্থাপন করে।

এইভাবে, আপনি EF এর মাধ্যমে সম্পর্কিত টেবিলের ডেটা একত্রে রিট্রাইভ করতে পারেন।


Lazy Loading

Lazy Loading হল একটি বৈশিষ্ট্য যা EF তে ডেটা রিট্রাইভ করার সময় নির্দিষ্ট সম্পর্কিত Entity এর ডেটা শুধুমাত্র তখনই লোড হয়, যখন সেটি প্রথমবারের মতো প্রয়োজন হয়। এটি দ্বিতীয় পর্যায়ের লোডিং হিসেবেও পরিচিত, কারণ শুধুমাত্র Navigational Property এর মাধ্যমে অন্য Entity রেফারেন্স করা হলে, EF ঐ Entity এর ডেটা লোড করবে।

Lazy Loading সুবিধা হল যে, এটি যখন প্রয়োজন হবে, তখনই সম্পর্কিত ডেটা লোড হয়, ফলে অপ্রয়োজনীয় ডেটা লোডের ঝামেলা কমে।

Lazy Loading উদাহরণ

Lazy Loading সক্ষম করার জন্য, প্রথমে আপনার Navigational Property গুলিকে virtual করতে হবে, যাতে EF নিজে স্বয়ংক্রিয়ভাবে সম্পর্কিত ডেটা লোড করতে পারে।

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    
    // Virtual Navigational Property for the related Courses (Enable Lazy Loading)
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    
    // Foreign Key for the related Student
    public int StudentId { get; set; }
    public Student Student { get; set; }  // Navigational Property
}

এখানে:

  • public virtual ICollection<Course> Courses { get; set; }: virtual কিওয়ার্ডের মাধ্যমে Lazy Loading সক্ষম করা হয়েছে।

Lazy Loading চালু করার জন্য DbContext এ অবশ্যই Proxies সক্রিয় থাকতে হবে। এটি EF Core তে ডিফল্টভাবে সক্রিয় থাকে, তবে EF 6 তে কিছু কনফিগারেশন করতে হয়।

Lazy Loading কাজ করার প্রক্রিয়া

যখন আপনি Student Entity এর Courses প্রপার্টি এক্সেস করবেন, EF তখন স্বয়ংক্রিয়ভাবে Course টেবিলের ডেটা লোড করবে। উদাহরণস্বরূপ:

using (var context = new SchoolContext())
{
    var student = context.Students.FirstOrDefault(s => s.StudentId == 1);

    // Lazy Loading will load the Courses data when accessed
    var courses = student.Courses;
    
    foreach (var course in courses)
    {
        Console.WriteLine(course.CourseName);
    }
}

এখানে, student.Courses এক্সেস করার সময় EF Courses টেবিলের ডেটা লোড করবে, যদি তা আগে লোড না করা থাকে।


Lazy Loading এবং Eager Loading এর মধ্যে পার্থক্য

Lazy Loading এবং Eager Loading দুটি আলাদা কৌশল, যা EF তে সম্পর্কিত ডেটা লোড করতে ব্যবহৃত হয়:

  • Lazy Loading: সম্পর্কিত ডেটা শুধুমাত্র তখনই লোড হয়, যখন সেটি প্রথমবারের মতো অ্যাক্সেস করা হয়। এর ফলে ডেটা লোডিং এর পরিমাণ কম থাকে, কিন্তু কখনও কখনও এটি পারফরম্যান্সের সমস্যা সৃষ্টি করতে পারে, বিশেষ করে একাধিক সম্পর্কিত টেবিল রিট্রাইভ করার ক্ষেত্রে।
  • Eager Loading: Eager Loading তে আপনি পূর্বেই সম্পর্কিত Entity গুলিকে লোড করে ফেলেন। এটি Include() মেথড ব্যবহার করে করা হয়। এতে সমস্ত সম্পর্কিত ডেটা একসাথে লোড হয়, যা পারফরম্যান্সের দিক থেকে ভালো হতে পারে যখন একাধিক সম্পর্কিত ডেটা প্রয়োজন।

Eager Loading উদাহরণ

using (var context = new SchoolContext())
{
    var student = context.Students
                         .Include(s => s.Courses) // Eager Loading for related Courses
                         .FirstOrDefault(s => s.StudentId == 1);

    foreach (var course in student.Courses)
    {
        Console.WriteLine(course.CourseName);
    }
}

এখানে:

  • Include(s => s.Courses) ব্যবহৃত হয়েছে, যা Courses সম্পর্কিত ডেটা একসাথে লোড করবে।

Conclusion

  • Navigational Properties ব্যবহার করে আপনি Entity গুলোর মধ্যে সম্পর্ক তৈরি করতে পারেন, যা আপনাকে ডেটাবেসের টেবিলগুলির মধ্যে সম্পর্ক সঠিকভাবে ম্যানেজ করতে সাহায্য করে।
  • Lazy Loading ব্যবহার করলে, সম্পর্কিত ডেটা স্বয়ংক্রিয়ভাবে তখন লোড হয়, যখন সেটি প্রথমবারের মতো প্রয়োজন হয়।

EF এ সম্পর্কিত ডেটা লোড করার জন্য Lazy Loading এবং Eager Loading উভয় কৌশলই ব্যবহার করা যায়, তবে প্রতিটি কৌশলের পারফরম্যান্সের পার্থক্য থাকতে পারে, তাই আপনার প্রয়োজনের উপর ভিত্তি করে সঠিক কৌশল নির্বাচন করা গুরুত্বপূর্ণ।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion